From: Jonas Ã…dahl Date: Tue, 1 Oct 2019 09:56:34 +0000 (+0200) Subject: st/settings: Add API to inhibit animations X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~772^2^2~90 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=f4f898282598ba452d8c2aceee631cf09f361291;p=gnome-shell.git st/settings: Add API to inhibit animations There may be situations where we shouldn't enable animations. Make it possible for the Shell to decide when there are such situations and in when needed inhibit animations. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/757 --- diff --git a/src/st/st-settings.c b/src/st/st-settings.c index d0fef040a..5ce73d015 100644 --- a/src/st/st-settings.c +++ b/src/st/st-settings.c @@ -60,6 +60,7 @@ struct _StSettings gchar *font_name; gchar *gtk_theme; gchar *gtk_icon_theme; + int inhibit_animations_count; gboolean enable_animations; gboolean primary_paste; gboolean magnifier_active; @@ -82,6 +83,41 @@ st_settings_set_slow_down_factor (StSettings *settings, g_object_notify_by_pspec (G_OBJECT (settings), props[PROP_SLOW_DOWN_FACTOR]); } +static gboolean +get_enable_animations (StSettings *settings) +{ + if (settings->inhibit_animations_count > 0) + return FALSE; + else + return settings->enable_animations; +} + +void +st_settings_inhibit_animations (StSettings *settings) +{ + gboolean enable_animations; + + enable_animations = get_enable_animations (settings); + settings->inhibit_animations_count++; + + if (enable_animations != get_enable_animations (settings)) + g_object_notify_by_pspec (G_OBJECT (settings), + props[PROP_ENABLE_ANIMATIONS]); +} + +void +st_settings_uninhibit_animations (StSettings *settings) +{ + gboolean enable_animations; + + enable_animations = get_enable_animations (settings); + settings->inhibit_animations_count--; + + if (enable_animations != get_enable_animations (settings)) + g_object_notify_by_pspec (G_OBJECT (settings), + props[PROP_ENABLE_ANIMATIONS]); +} + static void st_settings_finalize (GObject *object) { @@ -126,7 +162,7 @@ st_settings_get_property (GObject *object, switch (prop_id) { case PROP_ENABLE_ANIMATIONS: - g_value_set_boolean (value, settings->enable_animations); + g_value_set_boolean (value, get_enable_animations (settings)); break; case PROP_PRIMARY_PASTE: g_value_set_boolean (value, settings->primary_paste); diff --git a/src/st/st-settings.h b/src/st/st-settings.h index c2c4fa23e..8b2549469 100644 --- a/src/st/st-settings.h +++ b/src/st/st-settings.h @@ -33,6 +33,10 @@ G_DECLARE_FINAL_TYPE (StSettings, st_settings, ST, SETTINGS, GObject) StSettings * st_settings_get (void); +void st_settings_inhibit_animations (StSettings *settings); + +void st_settings_uninhibit_animations (StSettings *settings); + G_END_DECLS #endif /* __ST_SETTINGS_H__ */